{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "20d383a5-3af5-43b7-9166-b92d6672323c",
   "metadata": {},
   "source": [
    "# 第四章 逻辑回归模型 "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "12803402-6d29-429b-8346-4c9df132765f",
   "metadata": {},
   "source": [
    "### 案例实战1：股票客户流失预警模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b639776-ace7-4179-a7f8-e5c1686619fa",
   "metadata": {},
   "source": [
    "#### 首先我们要读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "5d825650-ecfc-4fef-9e23-6c863ff44c78",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>账户资金（元）</th>\n",
       "      <th>最后一次交易距今时间（天）</th>\n",
       "      <th>上月交易佣金（元）</th>\n",
       "      <th>累计交易佣金（元）</th>\n",
       "      <th>本券商使用时长（年）</th>\n",
       "      <th>是否流失</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22686.5</td>\n",
       "      <td>297</td>\n",
       "      <td>149.25</td>\n",
       "      <td>2029.85</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>190055.0</td>\n",
       "      <td>42</td>\n",
       "      <td>284.75</td>\n",
       "      <td>3889.50</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>29733.5</td>\n",
       "      <td>233</td>\n",
       "      <td>269.25</td>\n",
       "      <td>2108.15</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>185667.5</td>\n",
       "      <td>44</td>\n",
       "      <td>211.50</td>\n",
       "      <td>3840.75</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>33648.5</td>\n",
       "      <td>213</td>\n",
       "      <td>353.50</td>\n",
       "      <td>2151.65</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    账户资金（元）  最后一次交易距今时间（天）  上月交易佣金（元）  累计交易佣金（元）  本券商使用时长（年）  是否流失\n",
       "0   22686.5            297     149.25    2029.85           0     0\n",
       "1  190055.0             42     284.75    3889.50           2     0\n",
       "2   29733.5            233     269.25    2108.15           0     1\n",
       "3  185667.5             44     211.50    3840.75           3     0\n",
       "4   33648.5            213     353.50    2151.65           0     1"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "a=pd.read_excel('股票客户流失.xlsx')\n",
    "a.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88ad71a0-6fb3-4ee7-90b7-2c21ae2adfcd",
   "metadata": {},
   "source": [
    "#### 接着需要我们划分特征变量和目标变量，训练集和测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a0ffd8cf-ae4e-46df-81be-098e35f9d5bb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       账户资金（元）  最后一次交易距今时间（天）  上月交易佣金（元）  累计交易佣金（元）  本券商使用时长（年）\n",
      "1814   43251.5            192      98.50    2258.35           0\n",
      "5946  304449.5             22     369.50    5160.55           3\n",
      "3881  441357.5              9     325.75    6681.75           5\n",
      "2389  587076.5              2     427.25    8300.85           5\n",
      "3676  204027.5             39     352.00    4044.75           2\n",
      "1814    0\n",
      "5946    1\n",
      "3881    0\n",
      "2389    0\n",
      "3676    0\n",
      "Name: 是否流失, dtype: int64\n",
      "       账户资金（元）  最后一次交易距今时间（天）  上月交易佣金（元）  累计交易佣金（元）  本券商使用时长（年）\n",
      "3381  318867.5             20     399.25    5320.75           3\n",
      "6180  602466.5              2     512.00    8471.85           5\n",
      "4829   67191.5            133     225.00    2524.35           0\n",
      "3737   42495.5            188     253.00    2249.95           0\n",
      "4249   79404.5            116     329.50    2660.05           0\n",
      "3381    0\n",
      "6180    0\n",
      "4829    0\n",
      "3737    1\n",
      "4249    0\n",
      "Name: 是否流失, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "X=a.drop(columns='是否流失')\n",
    "y=a['是否流失']\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=1)\n",
    "print(X_train.head())\n",
    "print(y_train.head())\n",
    "print(X_test.head())\n",
    "print(y_test.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86454157-0ca1-4ea1-9361-8c08a267e1dc",
   "metadata": {},
   "source": [
    "#### 然后开始搭建模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "06ffeff6-67e6-4140-ad43-cc12ff2692e0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression()"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "model=LogisticRegression()\n",
    "model.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07be178b-1460-4465-bee9-0c4fc2440902",
   "metadata": {},
   "source": [
    "#### 我们可以用模型来预测数据的结果，还可以看看预测的得分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "31dd7b6a-9e5b-4461-9610-5706bacde480",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      " 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0\n",
      " 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1]\n"
     ]
    }
   ],
   "source": [
    "y_yuce=model.predict(X_test)\n",
    "print(y_yuce[0:100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9ef0c7be-d4fa-4ecf-ae88-5ef37433fc3b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>预测值</th>\n",
       "      <th>实际值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   预测值  实际值\n",
       "0    0    0\n",
       "1    0    0\n",
       "2    0    0\n",
       "3    0    1\n",
       "4    0    0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b=pd.DataFrame()\n",
    "b['预测值']=list(y_yuce)\n",
    "b['实际值']=list(y_test)\n",
    "b.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "64829ec1-543f-41e8-86ba-0a75c59bbf55",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7977288857345636"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4231e35-f4e8-4750-bdfd-7b46ce8671d3",
   "metadata": {},
   "source": [
    "#### 我们还可以使用模型来预测概率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "ac1ab88a-39a4-4b3c-89d4-91184f6515b9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.82041509, 0.17958491],\n",
       "       [0.84029656, 0.15970344],\n",
       "       [0.7981937 , 0.2018063 ],\n",
       "       [0.62989223, 0.37010777],\n",
       "       [0.61636604, 0.38363396]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_yuce_gailv=model.predict_proba(X_test)\n",
    "y_yuce_gailv[0:5]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9109c3ef-40b9-4acf-a1ac-e5cf529d2ba5",
   "metadata": {},
   "source": [
    "### 对我上述训练的模型进行评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "6604ec3e-b317-49ab-92db-5053064e20d0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.17958491, 0.15970344, 0.2018063 , ..., 0.04220526, 0.09782415,\n",
       "       0.63586812])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_yuce_gailv[:,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6b962e0-2ef5-4688-acff-e1e1190056a2",
   "metadata": {},
   "source": [
    "#### 在绘制ROC曲线之前需要计算假警报率、命中率以及阈值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "70bff0d1-fda9-4cab-bd18-2ff252dbf18c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>阈值</th>\n",
       "      <th>假警报率</th>\n",
       "      <th>命中率</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>inf</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.930369</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.002874</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.867342</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.034483</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.864187</td>\n",
       "      <td>0.001885</td>\n",
       "      <td>0.034483</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.857304</td>\n",
       "      <td>0.001885</td>\n",
       "      <td>0.040230</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         阈值      假警报率       命中率\n",
       "0       inf  0.000000  0.000000\n",
       "1  0.930369  0.000000  0.002874\n",
       "2  0.867342  0.000000  0.034483\n",
       "3  0.864187  0.001885  0.034483\n",
       "4  0.857304  0.001885  0.040230"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_curve\n",
    "fpr,tpr,thres=roc_curve(y_test,y_yuce_gailv[:,1])\n",
    "c=pd.DataFrame()\n",
    "c['阈值']=list(thres)\n",
    "c['假警报率']=list(fpr)\n",
    "c['命中率']=list(tpr)\n",
    "c.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be96340f-147f-4a4d-9cd5-315c5a740905",
   "metadata": {},
   "source": [
    "#### 开始绘制ROC曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "4588e069-94f9-41e3-98b1-3354cefb8cdd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AlVWVuq6666TJJ1xxhk644wzNGbMGL344ouaN2+e7rvvPl122WVq2bKlpKY/PPK5555Tz5491bx5c3Xp0kVTp07V3r171bZtW1VUVOiWW27R6NGjNXbsWG3atEnvvPOOJGnEiBF66qmnmrZDAPifAQB+9tFHHxmSjK+++sqzrLKy0mjXrp1xzTXXGIZhGEuWLDGOPfZYIyYmxujVq5fx8ccf1/ob5eXlxtVXX20kJycbycnJxvjx4w232+15f+rUqYakBr82bNhgGIZh/PLLL8bFF19svPTSS4bL5TIMwzBcLpcxefJko23btkbbtm2NDz74wDAMw5g8ebIRExNjXHzxxUZkZKQxd+7cQO4+AI3AnYIBONKkSZN09913+3yk5s0339TQoUM9dwo+lJqaGl1wwQX605/+pMmTJyslJcXz3rRp03TXXXdpwIABevPNNxUZyQFuIJhQaADAR263WzExMU2+Bw4A/6PQAAAAx+OYKQAAcDwKDQAAcDwKDQAAcLyweJZTTU2Ntm7dqpYtW3IyHwAADmEYhsrLy9W+ffvDXlkYFoVm69atSktLszsGAABohOLiYnXs2LHedcKi0Oy/s2hxcbHn4XcAACC4uVwupaWleb7H6xMWhWb/z0yJiYkUGgAAHMaX00U4KRgAADgehQYAADgehQYAADgehQYAADgehQYAADgehQYAADgehQYAADgehQYAADgehQYAADgehQYAADiebYVmx44dysjI0E8//eTT+suWLVP37t3VunVrTZ8+PbDhAACAo9hSaHbs2KFzzjnH5zKzfft2DRs2TKNHj9bKlSu1YMECffTRR4ENCQAAHMOWh1OOGjVKY8aM0RdffOHT+gsWLFD79u119913KyIiQvfcc4/mzJmjAQMGBDgpAAAOUVkpbdtm3+cnJkopKbZ9vC2FZtasWcrIyND48eN9Wj8/P18DBgzwPG3zxBNP1O23317n+m63W2632zPvcrmaFhgAgGBRUSEVF9detnu3dMIJ9uTZb8IEKTfXto+3pdBkZGQ0aH2Xy6Vjjz3WM5+YmKitW7fWuf6UKVM0ceLERucDACDgSkslH0+98HC7pezs+teJi2tsoqaJtqVSeD/e1k/3UXR0tGJjYz3zcXFxqqioqHP9CRMm6Oabb/bMu1wupaWlBTQjAAA+qaqSPv1U+stfmvZ3DvXzztix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vON33rEvBwAAFqLQhJrzzvOOTznFvhwAAFiIQhNq1q41p127SlFR9mYBAMAiFJpQs2OHOV20yNYYAABYKdruAGiiffukvDxz+uGH3uUREfZlAgDAYrYcoSkoKFBWVpZSUlKUk5MjwzB83ra0tFTt2rXTTz/9FLiATjJ0qHTiieb5MnfdZS5LTjZ/cgIAIExYXmjcbreGDh2qPn36aNWqVSosLNS8efN83j4nJ0clJSWBC+gkv/1W+0qmo46STj5ZKiyUojn4BgAIH5YXmqVLl6qsrEzTp0/XUUcdpdzcXM2ZM8enbT/55BMtWbJErVq1CnBKh9i0yTvevl364QdpxQqpXTv7MgEAYAPLC01+fr6ys7OVkJAgScrMzFRhYeFht3O73br66qv16KOPqkWLFodd1+Vy1XqFpCefNKdJSVLr1vZmAQDARpYXGpfLpYyMDM98RESEoqKitOvAG8IdQm5uro4++miNHDnysJ8xZcoUJSUleV5paWlNzh2U9p/4yxErAECYs7zQREdHKzY2ttayuLg4VVRU1LnNunXrNHPmTD3xxBM+fcaECRNUVlbmeRUXFzcpc1D64QfvEZq//93WKAAA2M3yM0dTU1NVUFBQa1l5ebliYmIOub5hGLrqqqs0adIktW/f3qfPiI2NPag0hRTDqH0VU1ycfVkAAAgClh+hycrK0sqVKz3zRUVFcrvdSk1NPeT6mzdv1qeffqqcnBwlJycrOTlZmzdvVmZmphYuXGhV7OBy663e8SmnSBddZF8WAACCQITRkJvA+MG+ffvUvn17PfTQQxo7dqyuvPJKlZSU6I033lBpaalatmypqANu2b9v3z5t2bKl1t847bTT9MILL6h3796HPUFYMs/bSUpKUllZmRITE/3+z2SpkpLaVzHV1HATPQBASGrI97flPzlFR0dr9uzZGj16tHJychQZGamPP/5YkpSSkqK8vDz17t271vqdO3c+6G907NjRpzITcjZs8I6/+ooyAwCAbDhCs19JSYlWr16t7OzsgN9XJqSO0LRvL/3yizm25z86AAAsEdRHaPZr27atzj77bLs+3rn2l5m//tXeHAAABBGetu1U//mP3QkAAAgaFBqncvpPZwAA+BGFBgAAOB6PZHaCggLp5pul3bvtTgIAQFCi0AS7Z545+NEGLVvykxMAAAfgJ6dgN2OGd3zGGdKi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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] \n",
    "plt.plot(fpr,tpr,color='r')\n",
    "plt.title('ROC曲线')\n",
    "plt.xlabel('FPR')\n",
    "plt.ylabel('TPR')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6b23d5f-8955-4052-8664-1015a4b940d4",
   "metadata": {},
   "source": [
    "#### 模型的AUC值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "c37d8659-380a-4411-95c2-d167a269dede",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8103854528908967"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_auc_score\n",
    "score=roc_auc_score(y_test,y_yuce_gailv[:,1])\n",
    "score"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8280edb9-a8fd-49aa-a251-39f146ac0662",
   "metadata": {},
   "source": [
    "#### 绘制KS曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "d1a00fe5-17d1-4e00-bb07-4be5c4a045c8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(thres[1:], tpr[1:])\n",
    "plt.plot(thres[1:], fpr[1:])\n",
    "plt.plot(thres[1:], tpr[1:] - fpr[1:])\n",
    "plt.xlabel('threshold')\n",
    "plt.legend(['tpr','fpr','tpr-fpr'])\n",
    "plt.gca().invert_xaxis() \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "55e0f628-2963-4b1f-a0a6-e86d71492e75",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4744656418256471"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max(tpr-fpr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "c655a76c-4a14-4a96-85b6-0af3c5224f24",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>阈值</th>\n",
       "      <th>假警报率</th>\n",
       "      <th>命中率</th>\n",
       "      <th>TPR-FPR</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>224</th>\n",
       "      <td>0.27769</td>\n",
       "      <td>0.255419</td>\n",
       "      <td>0.729885</td>\n",
       "      <td>0.474466</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          阈值      假警报率       命中率   TPR-FPR\n",
       "224  0.27769  0.255419  0.729885  0.474466"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c['TPR-FPR']=c['命中率']-c['假警报率']\n",
    "c[c['TPR-FPR']==max(c['TPR-FPR'])]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8e84f7f-7c9e-49a9-9a26-477324e64249",
   "metadata": {},
   "source": [
    "### 我还使用了其他的模型进行对比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "34a41ad8-7b1c-46b7-b741-0b1f82d64e91",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据形状: (7043, 6)\n",
      "\n",
      "数据前几行:\n",
      "    账户资金（元）  最后一次交易距今时间（天）  上月交易佣金（元）  累计交易佣金（元）  本券商使用时长（年）  是否流失\n",
      "0   22686.5            297     149.25    2029.85           0     0\n",
      "1  190055.0             42     284.75    3889.50           2     0\n",
      "2   29733.5            233     269.25    2108.15           0     1\n",
      "3  185667.5             44     211.50    3840.75           3     0\n",
      "4   33648.5            213     353.50    2151.65           0     1\n",
      "\n",
      "训练集大小: (5634, 5)\n",
      "测试集大小: (1409, 5)\n",
      "\n",
      "==================================================\n",
      "正在训练 决策树 模型...\n",
      "决策树 准确率: 0.7197\n",
      "分类报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.79      0.81      1061\n",
      "           1       0.44      0.50      0.47       348\n",
      "\n",
      "    accuracy                           0.72      1409\n",
      "   macro avg       0.63      0.65      0.64      1409\n",
      "weighted avg       0.73      0.72      0.73      1409\n",
      "\n",
      "混淆矩阵:\n",
      "[[839 222]\n",
      " [173 175]]\n",
      "\n",
      "==================================================\n",
      "正在训练 随机森林 模型...\n",
      "随机森林 准确率: 0.7672\n",
      "分类报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.87      0.85      1061\n",
      "           1       0.53      0.46      0.50       348\n",
      "\n",
      "    accuracy                           0.77      1409\n",
      "   macro avg       0.68      0.66      0.67      1409\n",
      "weighted avg       0.76      0.77      0.76      1409\n",
      "\n",
      "混淆矩阵:\n",
      "[[920 141]\n",
      " [187 161]]\n",
      "\n",
      "==================================================\n",
      "正在训练 支持向量机 模型...\n",
      "支持向量机 准确率: 0.7977\n",
      "分类报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.93      0.87      1061\n",
      "           1       0.65      0.40      0.50       348\n",
      "\n",
      "    accuracy                           0.80      1409\n",
      "   macro avg       0.74      0.66      0.68      1409\n",
      "weighted avg       0.78      0.80      0.78      1409\n",
      "\n",
      "混淆矩阵:\n",
      "[[984  77]\n",
      " [208 140]]\n",
      "\n",
      "==================================================\n",
      "正在训练 XGBoost 模型...\n",
      "XGBoost 准确率: 0.7764\n",
      "分类报告:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.88      0.86      1061\n",
      "           1       0.56      0.45      0.50       348\n",
      "\n",
      "    accuracy                           0.78      1409\n",
      "   macro avg       0.69      0.67      0.68      1409\n",
      "weighted avg       0.76      0.78      0.77      1409\n",
      "\n",
      "混淆矩阵:\n",
      "[[936 125]\n",
      " [190 158]]\n",
      "\n",
      "============================================================\n",
      "模型性能比较:\n",
      "============================================================\n",
      "支持向量机          : 0.7977\n",
      "XGBoost        : 0.7764\n",
      "随机森林           : 0.7672\n",
      "决策树            : 0.7197\n",
      "\n",
      "============================================================\n",
      "随机森林特征重要性:\n",
      "============================================================\n",
      "              特征       重要性\n",
      "2      上月交易佣金（元）  0.318963\n",
      "3      累计交易佣金（元）  0.239391\n",
      "0        账户资金（元）  0.234871\n",
      "1  最后一次交易距今时间（天）  0.137280\n",
      "4     本券商使用时长（年）  0.069495\n"
     ]
    },
    {
     "data": {
      "image/png": "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OnToYK7PzWRbfn5+GjdunP7880+VL19en3/+uaSMLuerV69WkSJFdPnyZb377rvq16+fDh8+rIMHD6patWpmGQ6HQzNmzJAkzZs3T7Vr19aJEyckZYy1Xrt2rQoVKqRChQppyJAhMgzDpQ4PPfSQWrVq5Va3WrVqKSUlRU6nU4ZhmJ98+fJp9erVSklJ0euvv27uP2zYMP300096/fXXzVblvn376vfffzf3WblypWw2mzw9PRUUFKTJkydn+5ssXrxYCQkJSkhIUJs2bdS+fXtzOfN1XZmt2lmlpKRIyngAYrPZzPHcNpvN7IafuW3RokUuIX3Pnj2y2+0u3fVr1aql7du3q3Pnzm7nAoB/M0I3AAC4KX379tX58+e1Zs0acxxzZqgrW7as2dK9bNkyl+MWLFhgtig3bdpUy5Yt0/Tp03Xx4kVzcq/ruXLlioKDg3X16lVt2rRJn3zyic6fP68rV67ovvvuU3x8vM6ePasRI0YoPj5eMTExCg4O1pUrV8wyPv/8cyUlJalYsWJq3769ihUrphEjRsgwDL300kvq1KmTChYsqM6dO+vAgQMaP368Sx1eeukll0nKDh06pGeeeUY//fSTjh8/7tat2+l06vz58zp16pSuXr0qSZo6dapGjBjh9nowPz8/l9nQH374YZ07d05nzpzRsWPH1K1bN7ffxNPTU+3atVNwcLCCg4P11VdfadGiReZy5vXJ+vDDMAwlJyerWbNmLg8Ijh8/rjJlymj27Nku6zM/n332meLj45WamqoyZcro+++/d3sd208//aT27dtrz549OnDggC5duqSUlBQdOHBAe/fu1Z49e254nQHgbsNEagAA4KaEhISoevXqWr16tcu7n68nLS1Nw4cPV7du3TR27FiVKVNG77//vsqWLatdu3a5vGIsJy+//LK++uoreXh4KDExUZ6enipVqpTq16+vxx9/XG+++aYZbAsWLKjAwEDZ7Xa1bdtWn3/+uc6cOaPXXntNL7zwgr744gt5eXnpyy+/VJkyZTR58mRt2bJFc+bMUdu2bRUaGqqxY8eqe/fuKl68uNq0aSMpo6V806ZN+vLLLzV37lx5eHiofv36Klu2bI7v9n7mmWckSdOnT1erVq30yiuvaNiwYRo5cqTLflln+pYyXsV1ownHHA6HZs+erYYNG0qS+vXrJ09PT33yySeSMiZda9KkiTluXpJOnjxpjsXOTrdu3bIN+JkWL16stm3bqlmzZm7bbDab5syZo48//lje3t5KTU1Venq6atasqfT0dEVERGT7CjcAuJvR0g0AAG7KpUuXdO7cOQUGBrptO3LkiMLDwxUeHm5OtiZJo0aN0tmzZ9WvXz9z3X/+8x/Vr19fhw8fdpn5Oyeff/65rl69qo8++kiSVLNmTa1YsULz58/XSy+9pI0bN5otx0FBQdqwYYOSkpLMbuhnz56Vh4eHXn31VbPMatWqafv27frPf/6jF198UWXKlDG3denSRV26dFG7du00ePBgSRndwuvUqaPdu3erSpUqatmypYYNG6by5csrKSkp2+7lq1atUlpamrp27arw8HAtXrzYpav5X5GSkqJu3bqpWLFiKlasmL7//nt988035nKTJk3M/TIVLVpUJ0+e1MWLFxUTE6PLly+refPmqlixok6dOqWYmBjFxMTo1VdfVZkyZcz9Ll26pFOnTqlp06bXrdMHH3ygq1evKjY2Vu+//74efPBBxcbG6urVqwRuAP9KhG4AAJBriYmJqlatmoKDg813TGfK7HYcHR2t06dP6/333zcnzbr//vv1zjvvqHDhwm5lrlixQnXq1MnV+U+dOqU333xT7dq1kyTNnj1b1atX19mzZ/X222/rqaeekiQNGTJEHTt2VGJionnsQw89pHXr1rm8xuvq1avq0KGDihYtqvfff9/tfNOmTdPTTz+tBx98UJI0YMAAbdq0SatWrdJ9991n7mez2XTq1ClVq1ZNUVFRLmXYbDaX2b+feOKJ2/Ke6qSkJLeg3759e3Xq1Mkl+Kelpalw4cLm+HQvLy8VL15c+fPnV1hYmAYNGqQff/xRlStX1qZNmyRJmzdv1qRJkzR79mxzv/DwcBUrVizbhy0AgJwRugEAQK4FBQXp999/16ZNmxQeHm4GuYSEBPn6+qpUqVKSMgL4xx9/rNdee01SRtDMbC3OOjnZsmXLdPr0aTNEX2vSpEn69ddfJWXMKF6/fn09+eSTevrppyVldNmeMmWKFixYoE2bNum9996TJL366qsqVaqUHn30UXOiNCnjtWGZdTAMQ4GBgVq5cqV+/PHHbMOkp6enFi5caHYvz5s3r/lu6muVLl1a8fHx2U54ZoXHHntMefLkUWhoqDl5Xebs5Vlf2Za5/fLly9mWM3jwYM2fP18REREaNWqUChQooCeffFI1atTg9V4AcBswphsAAORK5iujSpcuLUk6ePCgOnfurIoVK+q+++5T48aN9eSTT2rFihUKDw/Xt99+q8TERH333Xdq2bKlWY7D4ZDdbtelS5fUr18/9erVS3nz5jW3e3t768qVK0pOTta8efNUp04dNWrUSEuXLlXFihU1ffp0ffPNN2Z9Vq5cqXHjxmnFihUKDQ01z7Fo0SJ1795dvXr10rJly1xeVZWammrOxp31tVeZx2Z9PVZueXl5aeDAgbk+1uFwyOFwaOvWrfL19ZXT6dS5c+d04MABxcXFKSkpSQcOHJCUMSY+LS1N1apVk6enp06fPq2vv/7abVby7t27y8vLS1OnTnVZb7fblZycrKSkJLfJz0qWLKnQ0FB5eHho//79ypMnj/r27as//vhDlStXVmRkpPmgo0aNGm7fI/MBhiSdP39ekszZ6FNSUuRwOBQbG2sue3p6EuYB/KsQugEAQK5cGyaHDRum2rVra/LkyYqJidGSJUu0du1affbZZzp79qzi4uKUkpKixx9/3AzddrtdDodDqamp+u233xQcHKwPPvjApdy6devKx8dHAQEBCg4O1qRJkyRlzBzev39/2Ww2paamKjk5WZI0aNAgNW/eXLVr1zbHDCclJSk0NFRz585Venq627uh09PTc3xPdUpKipKSkm74e6Slpbn9Ji+++KIk6YsvvtDBgwd15cqVHLtjp6enKzU1VY0bN5bT6ZSPj49GjRqlUaNGufwWhmEoNTVVKSkpioqKkpeXl0qXLm2+Xzy7rupZx6ZLMn/zBQsWqGXLlvr111/17rvvym636/z58zp9+rTuvfdede3aVd988435GrPLly9ryZIlmjJlisaNG6fXXntNo0ePdik76wOMDh066LfffnOrT9bZ6du0aWO+Og4A/g1sxrUvoAQAAMiGj4+Pli9frvr160v6X6tl5ljlW2G32+XldfNtAGlpaUpNTTXD4Z3QvXt3Xb16VQsXLnTbNmLECH3yySdq06aNPv30U7fQL2V0Xf/444/NoP53cjqdeuWVVxQREaEKFSqoevXq2Y63z2rTpk2677775OPj47K+YMGCevvtt9W/f38lJSXJ09NTPj4+2T4MSE1NldPpdHk1GgDc7QjdAAAAt5nT6XR5/RcA4N+L0A0AAAAAgEV4BAsAAAAA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DQAAAACARQjdAAAAAABYhNANAAAAAIBFCN0AAAAAAFiE0A0AAAAAgEUI3QAAAAAAWITQDQAAAACARQjdAAAAAABYhNANAAAAAIBFCN0AAAAAAFjE605XAPi3OHnPPQr24DkXAAD4+0QeP36nqwD865EAAAAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIofsuc+7cOX3xxReWnmPHjh169tlnZRjGLZfx/fffa8SIEbelPoZhyG6335ay0tPTb0s5AAAAACARui0TFhamqlWr6sEHH9SDDz6oiIgIFS5c2FwuX7687rvvPnP/gwcPqmfPnkpJSXErq02bNpoyZUquzrtv3z516tRJ27Ztu+G+rVu3Vnh4uCIjI90+RYoUUf78+bM97ocfflBgYKASExNls9kUFhamkJAQeXh4KCwsTGFhYbLZbIqLi8v2+EuXLqlfv36aPn269u7dm6vvlROn06kePXpo+vTpbuuvF6AdDoccDofLun379qlOnTq6fPnyX6oTAAAAAGQidFvEx8dH33//vbZu3aqtW7eqa9eu6tWrl7k8depU+fj4mPuXLl1asbGxatq0qRITE13K8vb2lp+fn9s5nE6n274NGzZUkyZNdObMGZf1aWlpbvv6+PhozJgxOnHihNtn5cqV8vf3z/a7LViwQC1btpS3t7ckKTo6Wps3b1bx4sUVGxur2NhYs/xrJScnq23bturYsaMWLFigFi1aaPv27Tn8ijf2yiuvyM/PT71793ZZv27dOoWGhpoPAa79hIaGaunSpS7HVK5cWQMGDFCzZs2UlpZ2y3UCAAAAgExed7oCdysPDw89+eSTZvA8c+aMbDabfvzxR0lSQkKC8uTJ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FRERodDQUHl5eSksLEwlSpTQb7/9ptmzZ2vz5s0aOnRoruq1dOlSdejQwW395s2b5efnJw8PD9lsthw/np6eevbZZ7Mtu0OHDtl2WQcAAACAm3HDlu77779fv/32m7p3766dO3dq4cKF2rBhg7p06SJvb2899NBDMgxDUkbQS0tL04ABAyyvOP4n8/dPSUmRp6en0tPTlT9/fiUnJ+v3339XWlqavLy85OXlJbvdroSEhFs6T0pKiho0aKAXX3xRL730kvr06aNdu3bpueeeU/fu3eXp6alt27Zp8uTJeuuttxQcHKzVq1erWbNmKlq0qJ544gmXsvz9/RUbG+tyjhYtWpjf50auXLmS7ZjxBx54QJcuXZKvr69sNpsKFy6sZcuWqVq1anrggQc0YcIE1apVS06nM8eW8BIlSmjRokW5/3GySE1NVWpqqrkcHx9/S+UAAAAA+OfLVffyunXrasuWLWrVqpXq1KmjrVu3au3atWrUqJEKFy6scePGycfHx+q6IgcOh0NSRggNCwuTzWZTXFycmjdvrpdfflk7d+6Uw+HQG2+84XJcbGysPv/8c82bN++6ZWeW7+fnp3Xr1mnkyJEuYffNN9/Um2++6XLcggULzFePFStWTMWKFVNqamqOXb4NwzBf13W9LuFZ+fr6Ki0tze3fnre3t1k/p9OplJQUhYeHKygoSDabTf7+/jlOFJcpPj7+psaXZzVy5Mhct9YDAAAAuLvleurxkJAQ/fDDDxo9erS+/vprlS1bVmvWrNF9991H4L7D0tPTFRcXp3z58snb29ttXP0jjzyiZcuWuR138eJF9ezZU3a7PcfPRx99pLJly5rHFChQQHa7XYMGDVJ0dLSio6P12Wefaffu3eZymTJlsu26ni9fPoWGhiosLEyFChWSJIWFhSksLEyhoaEKDQ3V/v37c/29y5Urp82bN193n8OHD0uSihcvnutyJWnjxo2qVKnSTR2TafDgwYqLizM/vM8eAAAA+PfKdegeOnSofH199fjjj+vll1+WzWZT8eLF9dprr1lZP+TCm2++qbi4OFWrVk158+bV2rVrXbY/8MADOnLkiFug3bRpk6pVq3bdsgcOHKhHHnkkx+3Jyclq3769Lly44LL+2lfMSdKpU6f0+uuvKzY2VufPn5eU0doeGxurvn376o8//lDlypWvW5+sOnfurLFjx153n6+//lp169aVv79/rsu9evWqZsyYke148dzw9fVVSEiIywcAAADAv1OuQ/esWbPMWaz9/Pw0evRojR07VmlpaRo9erRGjx6tjz76SNu3b7essshekyZNtHDhQj366KOqVKmSy5jtlJQU/fLLL3rttdfUqVMnxcXFScpoAd6yZYuaNm160+cLCwtTvnz5JEkff/yxqlWrpsjISPXu3Vvr16/Xc8895zZTupQRRufMmaPp06e7rD948KCmTp1qlplbbdq00ZUrVzRjxoxst587d05jx47Viy++mGMZS5cudXtg0KdPH3Xq1ElFihS5qfoAAAAAwLVyHbqzzmBtGIZSUlLM9yAnJycrOTlZFy9eVKdOnW5/LXFdH330kaKiovTqq69q0KBBeuKJJ3TlyhWdOnVKnTt31vz589W/f39VqFBBNWrU0OXLl/XKK6/oqaeeUsmSJW/6fEOHDlWVKlXUtWtXff7551q0aJHS0tLk7++vJ598Up9++qlWrVrlMlO63W5XYGCgJk2a5PaKsjfffFPDhg1TiRIlZLfbs20lz46Hh4fmzZunMWPGaNq0aS7bjh8/riZNmqhevXp66qmnzPWenp76888/JWX8u+3Tp4+WLFkiKaN1vkuXLoqNjdV77713078LAAAAAFzLZuRiqui6detq+/btqlmzpgzD0NatW83W1AIFCujixYvmvgUKFNCFCxdyPRkW/pqdO3eqZcuW+vXXX82x18uWLVPTpk3VrVs3NW7cWB07dpSU8bBk3bp1SkhIULt27bRr165cvQ87k8PhUMuWLfX777+rVKlS6tatm/r06SNfX19zn9TUVM2YMUOjR4/Wjz/+qHvuuUdSxvjrkydPyt/fX4ZhyGazyW63y8vLSw6HQx4eHrLb7UpLS9Ps2bNv6uHNpUuXtGPHDjVu3FiS9NVXX6lr165q1KiRFixY4NK1/LXXXtN///tfc3K4WrVq6ZdfflFwcLCkjAngnn766Vy/Ti03Midl2128uII9cv2cCwAAIFuRx4/f6SoA0P/+zo+Li7vukNJche5Vq1bp2Wef1TfffCOn06m2bdsqKipK0v9C9++//668efOqTJkyLiEM1suc9ftmXL58+aa7c0sZ47JDQkIUFhZ23f2cTqdL74i/k9Pp1C+//HJLXeetQOgGAAC3E6Eb+L8ht6E7VwmgQYMG8vb2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ByNZlSxZ0m3df//7X7388ssu6zp06KDGjRsTugEAAAD8JXckdEdHR6tWrVqKjo5WaGiogoODlZCQoISEBBUuXNhlX7vdrgoVKujbb7+VJMXHx2vVqlWqXr16rs41atQoDRkyJNd1K1GihMtY6NDQUNntdrVq1UpPPvmkJOnYsWMqX768pIyW7datW5v7x8bGqnv37vrjjz+0ePFit9mw9+zZow8++EBTpkxR165d9eOPP7psX7VqlZo1a6Y2bdpo7NixN6xvkSJF9PHHH2vFihVasmSJyyRyWb/HoEGDzIcJKSkpGjJkiGbMmKFZs2apVatWkqSBAweqRYsW2rt3r9q3b6/w8HC1b99e06dP17fffqvSpUvLw8NDW7duNbuX22w2HTp0SDVr1tT+/ftVqlSpG9Y5M8DfaN2NREVFqUSJEm7rCxcurMuXL8vb29sM+itWrNBTTz2lN954Q2+//ba5r8PhyHb8ef78+XX58uWbrpOUMa4/66R517bqAwAAAPj3uCOhO3/+/Dpy5Ii6deumokWL6sEHH9SmTZt06dIltW7dWqmpqWYIi4yMNFtQDcNQbGysIiIi1K5dO61evTrb8p944glzhvEnn3xSJUuWlI+Pz3W7GxuGobS0NLcAtnLlSo0ZM0bLli0z10VFRSkuLk6SXMZjSxkh/aGHHtLYsWN17tw5NWrUSMeOHVPBggV14cIFDR06VIsXL9aqVavc6nDw4EF17txZ0dHRunTpkj755BMVL15cPj4+OnDggCpWrKjLly/rySef1PTp0yVJM2fO1IYNG9S2bVv99NNPql69erYTlGWV+VusX79epUuXNte//vrrLl3CGzZsqL1792rGjBlmmM6u+3q5cuXUtm1bvf/++7me+TvruPWYmBi98soruTouq5CQkGwDrYeHh/LmzeuybvHixWrTpo2mT5+ut99+220CtWulpqbe1IRuWY0cOVJDhw69pWMBAAAA3F3u+ERqV69eVWxsrK5evSop4xVYGzduVIcOHfT555+rc+fOZug+evSovLy8FBERoZSUFE2ZMsVthunZs2frp59+MperVq2qqlWr3nL93nvvPXP2cimjlX7//v368ccf9eabb7rtb7PZNGjQIEkZDwwaNGigt956S9OmTVP37t3VsWNHNWvWzO242bNn6/XXX9e7776rF154QVOnTtUXX3yh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AAAAuJbXna7A/2UOh0Oenp4u6/z9/eXj43PdfatUqaLRo0fr1KlTqly5smJiYlS2bFldvHhRycnJmjdvnku5a9eu1VNPPaWAgAB5eHjI6XTKw8NDXl5eqlevnnk+wzCUmJioJk2a6IsvvpAknTp1Slu3btW0adOUP39++fv7y8PDQ4mJiUpJSVFkZKScTqeSkpLUp08fDR8+XJLk6+urcuXKae/evZIyWtbz58+vI0eOyMsr459F8+bN5evra9aze/fumj9/vvz8/JSenq4KFSpo27ZtLr9DZl2z+40kyc/PT35+fubyRx99pPnz599Ua3RWHTp00COPPKKmTZu6rHc6nRo+fLgMw1DdunUlZQR0Hx8feXp6ym63KykpSS+99JIGDhwoSWrWrJl27dqlDh066Lvvvrul+gAAAABAVoTu63jssce0YcMGM3impaUpJSVFkjRmzBgznKalpalRo0b6/vvvdfToUd17770KCQmRt7e30tLSZLfbVaZMGbPcChUqKCkpSbGxsZKkRx55RNHR0ZKkRYsWacaMGVq2bJlZfvXq1TV69GjVr1/frY7Tpk1TSEiIKlSooIsXL8pms0mSZsyYoTVr1mjevHmSMgJ71i7tHh656+SQWQdJ8vb21sCBAzV8+HAtWbJEY8eO1ddff619+/bJ09NTHh4eunr1qqSMMF2sWDF16dIlx7InTpyoUaNGaeXKlbr//vtzVZ+spk6dqrx582rQoEHZlu3t7a3z58+bv8m9996rMWPGqFGjRjmWOXjwYHXt2lWTJ09W3759b7pOAAAAAJAVofs6MsdhZ3rssce0fft2eXp6qkuXLhozZozbMaVLl1ZCQoK5PHbsWO3fv1+fffZZrs7Zpk0bzZ49W3/88Yfq1aunbdu26ezZs6pVq5bbvvHx8Zo+fboZKt977z199dVXkqSYmBhdvXpVVapUkSQFBwdrw4YN5rGenp46cuSIud3hcEjKCKaZTp06pbZt25rLWQN45nKRIkVkGIa8vLxcupVXqVJFefLkyfF7vvPOO5o6dapWrVqlqlWr5uq3ycrpdGr8+PFat26d27bTp09ryJAhWrRokfnb3IyxY8eqTp066t27d64fTgAAAABAdgjduXTs2DHt3LlTrVq1kpeXl7766iuNGjXKrfv51atX5evrawbUlStXqmXLlm7lpaeny263y9/f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O3Ad7w5cx7sD1/HWGYahhIQEFS5c+Lr7EboBi3l4ZEydEBoayv+R3QVCQkK4jncBruM/H9fw7sB1vDtwHe8OXMdbk5tGNSZSAwAAAADAIoRuAAAAAAAsQugGLObr66t3331Xvr6+d7oq+Au4jncHruM/H9fw7sB1vDtwHe8OXEfr2YwbzW8OAAAAAABuCS3dAAAAAABYhNANAAAAAIBFCN0AAAAA8C936tQpbd26VWlpaXe6KncdQjdwC/bu3auHHnpIefLk0WuvvabcTI2wZMkSlShRQoULF9aCBQtctk2cOFEFCxZUqVKltGrVKquqjSxu5zU0DENhYWGy2WzmZ/jw4VZWH//frVxHSVq/fr3Kly/vtv569ymsc7uvY9WqVV3uxx49etzuKiMbt3Idhw4dqrx588rX11etW7dWQkKCuY378e93u68h9+KdcSvX8dVXX9X999+vjh07qmTJkjpw4IC5jXvxNjAA3JSUlBQjMjLS6N27t3HkyBGjWbNmxsyZM697zJ49ewwfHx9j+vTpxu7du40yZcoYBw4cMAzDMH7++WfDz8/P+Pbbb40//vjDKFmypBEdHf13fJV/rdt9DQ8ePGiUKFHCiImJMT8pKSl/x1f5V7uV62gYhrF161ajQIECRokSJVzWX+8awzq3+zpevXrVCAgIMC5evGjej0lJSRbVHplu5TrOmzfPKFu2rLFp0ybj8OHDRvny5Y0333zTMAzuxzvhdl9D7sU741au4+rVq42yZcsacXFxhmEYRrdu3YyuXbsahsG9eLsQuoGb9M033xh58uQxrl69ahiGYezcudOoU6fOdY8ZMGCA0aRJE3N5/PjxxltvvWUYhmG0bNnS6N27t7nt5ZdfNqZPn25BzZHpdl/DefPmGR06dLCuwsjWrVzHxMREo3jx4sawYcPcwtr1rjGsc7uv47p164yaNWtaVV3k4Fau48iRI43169eby++8847RtGlTwzC4H++E230NuRfvjFu5juvXrzfWrFljLn/88cdG8+bNDcPgXrxd6F4O3KRdu3apZs2aCggIkJTRdWr//v03PKZBgwbmcvXq1bVt27YbboM1bvc13Lx5szZv3qywsDAVKFBAb7/9dq67x+LW3cp19Pb21vr16/Xwww9nWx734t/vdl/HzZs3KyoqSvnz51dYWJj69u2r1NRUS+qO/7mV6zho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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "最佳模型: 支持向量机 (准确率: 0.7977)\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n",
    "df = pd.read_excel('股票客户流失.xlsx')\n",
    "print(\"数据形状:\", df.shape)\n",
    "print(\"\\n数据前几行:\")\n",
    "print(df.head())\n",
    "X = df.drop(columns='是否流失')\n",
    "y = df['是否流失']\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)\n",
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train)\n",
    "X_test_scaled = scaler.transform(X_test)\n",
    "print(\"\\n训练集大小:\", X_train.shape)\n",
    "print(\"测试集大小:\", X_test.shape)\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.svm import SVC\n",
    "from xgboost import XGBClassifier\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "models = {\n",
    "    '决策树': DecisionTreeClassifier(random_state=1),\n",
    "    '随机森林': RandomForestClassifier(random_state=1, n_estimators=100),\n",
    "    '支持向量机': SVC(random_state=1),\n",
    "    'XGBoost': XGBClassifier(random_state=1, eval_metric='logloss')\n",
    "}\n",
    "results = {}\n",
    "for name, model in models.items():\n",
    "    print(f\"\\n{'='*50}\")\n",
    "    print(f\"正在训练 {name} 模型...\")\n",
    "    if name == '支持向量机':\n",
    "        X_tr = X_train_scaled\n",
    "        X_te = X_test_scaled\n",
    "    else:\n",
    "        X_tr = X_train\n",
    "        X_te = X_test\n",
    "    model.fit(X_tr, y_train)\n",
    "    y_pred = model.predict(X_te)\n",
    "    accuracy = accuracy_score(y_test, y_pred)\n",
    "    results[name] = accuracy\n",
    "    print(f\"{name} 准确率: {accuracy:.4f}\")\n",
    "    print(f\"分类报告:\")\n",
    "    print(classification_report(y_test, y_pred))\n",
    "    print(f\"混淆矩阵:\")\n",
    "    print(confusion_matrix(y_test, y_pred))\n",
    "print(f\"\\n{'='*60}\")\n",
    "print(\"模型性能比较:\")\n",
    "print(\"=\"*60)\n",
    "for name, accuracy in sorted(results.items(), key=lambda x: x[1], reverse=True):\n",
    "    print(f\"{name:<15}: {accuracy:.4f}\")\n",
    "print(f\"\\n{'='*60}\")\n",
    "print(\"随机森林特征重要性:\")\n",
    "print(\"=\"*60)\n",
    "rf_model = RandomForestClassifier(random_state=1, n_estimators=100)\n",
    "rf_model.fit(X_train, y_train)\n",
    "feature_importance = pd.DataFrame({\n",
    "    '特征': X.columns,\n",
    "    '重要性': rf_model.feature_importances_\n",
    "}).sort_values('重要性', ascending=False)\n",
    "print(feature_importance)\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "plt.figure(figsize=(10, 6))\n",
    "sns.barplot(data=feature_importance, x='重要性', y='特征',color='r')\n",
    "plt.title('随机森林特征重要性')\n",
    "plt.tight_layout()\n",
    "plt.show()\n",
    "best_model_name = max(results, key=results.get)\n",
    "print(f\"\\n最佳模型: {best_model_name} (准确率: {results[best_model_name]:.4f})\")\n",
    "def predict_churn(model, scaler, new_data, model_name):\n",
    "    if model_name == '支持向量机':\n",
    "        new_data_scaled = scaler.transform(new_data)\n",
    "        prediction = model.predict(new_data_scaled)\n",
    "    else:\n",
    "        prediction = model.predict(new_data)\n",
    "    probability = model.predict_proba(new_data)[:, 1] if hasattr(model, 'predict_proba') else None\n",
    "    return prediction, probability"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95e1d328-2b64-4054-abed-ef235ceb82c5",
   "metadata": {},
   "source": [
    "#### 我最开始得到的逻辑回归的AUC为0.8103854528908967\n",
    "\n",
    "#### 综上得到如下结果：\n",
    "\n",
    "🥇 逻辑回归表现最佳\r\n",
    "AUC = 0.8104，在所有模型中最\r\n",
    "\r\n",
    "这表明逻辑回归在这个特定的客户流失预测问题上具有最好的分能力\r\n",
    "\r\n",
    "AUC超过0.8，通常被认为是相当不错模型性能\r\n",
    "\r\n",
    "🥈 支持向量机紧随其后\r\n",
    "AUC = 0.7977，与辑回归相差不大\r\n",
    "\r\n",
    "说明线性或近似线性的分类边界能很适合这个数据集\r\n",
    "\r\n",
    "🥉 树模型表现相对较差\r\n",
    "XGBoost和随机森林的AU在0.76-0.78之间\r\n",
    "\r\n",
    "决策树表现最差，只有0.7197策树表现最差，只有0.7197"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6906747a-1092-4a21-8a93-2ad2a9681313",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
